<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script type="module">
	// 1- 执行器函数会同步执行。
	// 2- 执行器函数接收两个参数：resolve,reject
	// 3- Promise实例拥有状态（state）和值(value)实例属性。
	// 4- Promise的状态与值只能更改一次
	// 5- Promise的状态与值只有三种方式可以更改
	//    1- resolve将状态更改为成功(fulfilled)，接收的值为成功值
	//    2- reject将状态更改为失败（rejected），接收的值为失败值
	//    3- 如果有异常，那么状态为失败，值为异常信息
	// 6- 在Promise实例的原型对象中拥有一个非常重要的函数then
	//   1- then接收两个回调函数（成功回调onResolved，失败回调onRejected）
	//   2- 成功回调与失败回调执行是异步的。
	//   3- Promise的实例状态为成功即执行成功回调，状态为失败执行失败回调。(中断Promise链)
	//   4- then函数的返回值是一个新的Promise实例，
	//      新的Promise实例的属性和状态受成功或失败回调的返回值的影响 。
	//   5- 如果成功或失败回调的返回值为非Promise实例，
	//      那么then返回的Promise的状态为成功，值为对应的成功或失败回调的返回值
	//   6- 如果成功或失败回调返回的是一个Promise实例，那么then获取到的Promise实例与返回的实例状态和值是相同的。
	//   7- 如果成功或失败回调中产生异常，那么得到的是一个失败的Promise实例，失败值为异常信息
	//   8- then函数是可以省略成功回调和失败回调。(异常穿透)
	//      成功回调默认值：value=>value
	//      失败回调默认值：reason=>{throw reason}
	//   9- 可以通过then函数先指定回调函数，后更改状态
	//   10- 可以先更改状态，然后再通过then函数指定回调函数
	
	// new Promise(function(resolve,reject){
	// 	resolve(10);
	// }).then(value=>{
	// 	console.log("成功回调1",value);// 10
	// 	return new Promise(function(){})
	// }).then(value=>{
	// 	console.log("成功回调2",value);// undefined
	// })
	
	
	
	// p的状态先更改，后指定的回调函数
	// const p = new Promise(resolve=>{
	// 	resolve(100);
	// });
	// p.then(value=>{
	// 	console.log(value);
	// })
	
	// 也可以先指定回调函数，后更改状态。
	const p = new Promise(resolve=>{
		setTimeout(function(){
			resolve(100);
		})
		
	});
	p.then(value=>{
		console.log(value);
	})
</script>
</html>